<?php

// [ Loader类 ]

namespace core;

class Loader
{
    // 类池
    private static $_classMap = [];
    // 命名空间映射
    private static $_namespaceMap = [
        'core' => CORE_PATH . 'lib' . DS,
    ];

    // 自动加载
    public static function init()
    {
        // 自动加载机制
        spl_autoload_register('self::set');

        // Composer初始化
        \core\Composer::init();
        // 调试初始化
        \core\Debug::init();
        // 函数初始化
        \core\Common::init();
        // 配置初始化
        \core\Config::init();
        // 请求初始化
        \core\Request::init();
        // 路由初始化
        \core\Route::init();
    }

    public static function set($class)
    {
        $original = $class;
        isset(self::$_namespaceMap[dirname($class)]) && $class = self::$_namespaceMap[dirname($class)] . basename($class);
        if ( isset(self::$_classMap[$original]) ) {
            return true;
        } else {
            $file = $class . '.php';
            $file = str_replace('\\','/',$file);
            if ( is_file($file) ) {
                include $file;
                self::$_classMap[$original] = $file;
                return true;
            } else {
                return false;
            }
        }
    }

    public static function get($class = '')
    {
        return empty($class) ? self::$_classMap : ( isset(self::$_classMap[$class]) ? self::$_classMap[$class] : null );
    }
}
